// #include<iostream>
// #include<map>
// using namespace std;
// const int N = 45;
// int a[N][N];

// map<int, pair<int, int>> mp;
// int main()
// {
//     int n; cin >> n;
//     a[1][n / 2 + 1] = 1;
//     int k = 2;
//     mp[1] = make_pair(1, n / 2 + 1);
//     while (k <= n * n)
//     {
//         if (mp[k - 1].first == 1 && mp[k - 1].second != n)
//         {
//             mp[k].first = n; mp[k].second = mp[k - 1].second + 1;
//             a[n][mp[k - 1].second + 1] = k;
//         }
//         else if (mp[k - 1].first != 1 && mp[k - 1].second == n)
//         {
//             mp[k].first = 1; mp[k].second = mp[k - 1].second - 1;
//             a[1][mp[k - 1].second - 1] = k;
//         }
//         else if (mp[k - 1].first == 1 && mp[k - 1].second == n)
//         {
//             mp[k].first = mp[k - 1].first + 1; mp[k].second = mp[k - 1].second;
//             a[mp[k - 1].first + 1][mp[k - 1].second] = k;
//         }
//         else if (mp[k - 1].first != 1 && mp[k - 1].second != n)
//         {
//             if (a[mp[k - 1].first - 1][mp[k - 1].second + 1])
//             {
//                 mp[k].first = mp[k - 1].first + 1; mp[k].second = mp[k - 1].second;
//                 a[mp[k - 1].first - 1][ mp[k - 1].second] = k;
//             }
//             else{
//                 mp[k].first = mp[k - 1].first - 1; mp[k].second = mp[k - 1].second + 1;
//                 a[mp[k - 1].first - 1][ mp[k - 1].second] = k;
//             }
//         }
//         k++;
//     } 
    
//     for (int i = 1; i <= n; i++)
//     {
//         for (int j = 1; j <= n; j++)
//         {
//             cout << a[i][j] << " ";
//         }
//         cout << endl;
//     }
//     return 0;
// }


#include<iostream>
#include<map>
using namespace std;
const int N = 45;
int a[N][N];
map<int, pair<int, int>> mp;

int main()
{
    int n; cin >> n;
    a[1][(n + 1) / 2] = 1;
    mp[1] = {1, (n + 1) / 2};
    for (int k = 2; k <= n * n; k++)
    {
        int x = mp[k - 1].first, y = mp[k - 1].second;
        if (x == 1 && y != n) 
        {
            a[n][y + 1] = k;
            mp[k] = {n, y + 1};
        }
        else if (y == n && x != 1) 
        {
            a[x - 1][1] = k;
            mp[k] = {x - 1, 1};
        }
        else if (x == 1 && y == n)
        {
            a[x + 1][y] = k;
            mp[k] = {x + 1, y};
        }
        else if (x != 1 && y != n)
        {
            if (a[x - 1][y + 1])
            {
                a[x + 1][y] = k;
                mp[k] = {x + 1, y};
            }
            else{
                a[x - 1][y + 1] = k;
                mp[k] = {x - 1, y + 1};
            }
        }
    }

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}